package com.xyoto.community.mapper.main;

import com.xyoto.community.entity.main.Message;
import com.xyoto.community.po.MessageNewestFanMessagePO;
import com.xyoto.community.po.NewestInteractMessagePO;
import io.swagger.annotations.ApiModel;

import java.util.List;

/**
 * @author coderFu
 * @create 2021/10/5
 */
@ApiModel("消息持久类")
public interface MessageMapper {

    /**
     * 新增通知
     * @param message
     * @return
     */
    Integer insertMessage(Message message);

    /**
     * 删除消息通知
     * @param message
     * @return
     */
    Integer removeMessage(Message message);

    /**
     * 根据用户id查询最新的互动消息
     * @param userId
     * @return
     */
    NewestInteractMessagePO getNewestMessage(Integer userId);

    /**
     * 判断是否有最新的粉丝数据
     * @param userId
     * @param type
     * @return
     */
    Short checkIsExistNewestFanMessage(Integer userId,Short type);

    /**
     * 获取用户互动消息列表
     * @param endIndexId
     * @param targetUserId
     * @return
     */
    List<NewestInteractMessagePO> getNewestInteractMessageList(Integer targetUserId,Integer endIndexId);


    /**
     * 根据用户id查询用户未读消息个数
     * @param targetUserId
     * @return
     */
    Integer getUnreadCount(Integer targetUserId);

    /**
     * 根据用户id和关注状态，查询用户关注信息
     * @param userId
     * @param userFollow
     * @return
     */
    MessageNewestFanMessagePO getNewestFanMessage(Integer userId, short userFollow);

    /**
     * 获取未读关注个数
     * @param targetUserId
     * @return
     */
    Integer getUnReadFollowCount(Integer targetUserId);

    /**
     * 获取用户消息列表
     * @param targetUserId 目标用户id
     * @return
     */
    List<MessageNewestFanMessagePO> getFansMessageList(Integer targetUserId);

    /**
     * 更新粉丝消息读取状态
     * @param targetUserId
     * @return
     */
    Integer updateFanMessageReadStatus(Integer targetUserId);

    /**
     * 更新互动消息读取状态
     * @param targetUserId
     * @return
     */
    Integer updateInteractMessageReadStatus(Integer targetUserId);


    /**
     * 根据三级父类id删除消息
     * @param dynamicId
     * @param type
     * @return
     */
    Integer deleteMessageByThirdParentId(Integer dynamicId, List<Short> type);

    /**
     * 根据二级父类id删除消息
     * @param dynamicCommentId
     * @param type
     * @return
     */
    Integer deleteMessageBySecondParent(Integer dynamicCommentId, List<Short> type);

    /**
     * 根据一级父类的id删除消息
     * @param dynamicCommentReplyId
     * @param type
     * @return
     */
    Integer deleteMessageByFirstParent(Integer dynamicCommentReplyId, List<Short> type);


    /**
     * 根据零级父类的id删除消息
     * @param dynamicDoubleReplyId
     * @param type
     * @return
     */
    Integer deleteMessageByZeroParent(Integer dynamicDoubleReplyId, List<Short> type);

    /**
     * 根据用户id，获取我的互动消息列表
     * @param userId
     * @param endIndexId
     * @return
     */
    List<NewestInteractMessagePO> getMyInteractMessageList(Integer userId, Integer endIndexId);
}
